package com.emex.app.stuff.utils;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * The class is used for get current russian date format.
 *
 * @author Dmitriy Ugarov.
 */
public class DateUtils {

    /**
     * String format.
     */
    public static String FORMAT = "dd.MM.yyyy";
    public static String SHORT_FORMAT = "dd.MM.yy";
    public static String FORMAT_DATETIME = "dd.MM.yyyy, HH:mm";
    private static final String[] MONTHS_OF = new String[]{"Января", "Февраля",
        "Марта", "Апреля", "Мая", "Июня", "Июля", "Августа", "Сентября",
        "Октября", "Ноября", "Декабря"};
    private static final String[] MONTHS = new String[]{"Январь", "Февраль",
        "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь",
        "Октябрь", "Ноябрь", "Декабрь"};

    /**
     * Return date string formated by template dd.MM.yyyy
     *
     * @param date the date.
     * @return date string
     */
    public static String getFormatedDateString(Date date) {
        SimpleDateFormat format = new SimpleDateFormat(FORMAT);
        return format.format(date);
    }

    /**
     * Return SimpleDateFormat with format as dd.MM.yyyy.
     *
     * @return
     */
    public static SimpleDateFormat getSimpleDateFormat() {
        return new SimpleDateFormat(FORMAT);
    }

    /**
     * Get string representation of default format.
     *
     * @return string representation of default format
     */
    public static String getFormat() {
        return FORMAT;
    }

    public static String getMonthOf(final int month) {
        return MONTHS_OF[month];
    }

    public static String getMonth(final int month) {
        return MONTHS[month];
    }

    /**
     * Return date with format as dd.MM.yyyy.
     *
     * @param date
     * @return
     */
    public static String getDefaultFormattedString(Date date) {
        if (date != null) {
            DateFormat df = new SimpleDateFormat(FORMAT);
            return df.format(date);
        }
        return "";
    }

    /**
     * Return date with format as dd.MM.yy.
     *
     * @param date
     * @return
     */
    public static String getShortFormattedString(Date date) {
        DateFormat df = new SimpleDateFormat(SHORT_FORMAT);
        return df.format(date);
    }

    /**
     * Return date with format as dd month yyyy.
     *
     * @param date
     * @return
     */
    public static String getExtendedFormattedString(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        String dateString = calendar.get(Calendar.DAY_OF_MONTH)
                + " " + DateUtils.getMonthOf(calendar.get(Calendar.MONTH))
                + " " + calendar.get(Calendar.YEAR) + " г.";
        return dateString;
    }

    /**
     * Verify is time correct. Correct format HH:MM.
     *
     * @param time
     * @return
     */
    public static boolean verifyFormatTime(String time) {
        if (time == null || time.length() != 5 || time.indexOf(":") != 2) {
            return false;
        }
        try {
            Integer hh = Integer.valueOf(time.substring(0, 2));
            Integer mm = Integer.valueOf(time.substring(3, 5));
            if (hh < 0 || hh > 23 || mm < 0 || mm > 59) {
                return false;
            }
        } catch (NumberFormatException ex) {
            return false;
        }
        return true;
    }
}
